Google Street View is a technology featured in Google Maps and Google Earth that provides interactive panoramas from positions along many streets in the world. It was launched in 2007 in several cities in the United States, and has since expanded to include cities and rural areas worldwide. Streets with Street View imagery available are shown as blue lines on Google Maps.
Google Street View displays interactively panoramas of stitched VR photographs. Most photography is done by car, but some is done by tricycle, boat, snowmobile, and underwater apparatus, as well as on foot.
As of August 2021 however, not all the countries have received an equal coverage, which can be seen from the following images taken from Google Maps
Looking at the global level, one might put forward the hypothesis that those countries which have full street view coverage belong to the 'Developed" countries block. Others might argue that there may be other factors in play here - like the ease of access for Google to map the streets because of terrorism, govt. policies, privacy laws, societal temperament etc. Some others might say it is just a matter of time.
Well, leaving aside the aspect of time, let us focus on the other two hypotheses. Let's try to answer what all these countires have in common that might help us understand the cause of this disparity. We are going to evaluate these two groups of countries - covered and uncovered quantitatively on Development Level and also briefly qualitatively on some possible factors.
We will be commparing a manually compiled list of the names of these street view covered countires with the countries database taken from the UNDP Data center (http://hdr.undp.org/en/data). A few points about this dataset:
The Dataset contains the following fields:
Finally, some average benchmark values for the above metrics:
# On y va!
import pandas as pd
import numpy as np
import seaborn as sb
import plotly.express as px
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (10,10)
#Reading the UNDP collected DataSet into a pandas dataframe
undp = pd.read_excel(r'C:/Users/Mayank Harlalka/Documents/UNDP Countries Dataset.xlsx')
#Reading the manually collected Street View into a pandas dataframe
street_view = pd.read_excel(r'C:/Users/Mayank Harlalka/Documents/Street View Countries.xlsx')
#Checking out the undp datafram
undp
| HDI Rank | Countries | HDI 2019 | Internet users, total (% of population) 2018 | Coefficient of Human Inequality 2019 | GDP per capita (2017 PPP $) | Human Freedom Score 2018 | |
|---|---|---|---|---|---|---|---|
| 0 | 169 | Afghanistan | 0.51 | 13.5 | NaN | 2202.0 | NaN |
| 1 | 69 | Albania | 0.80 | 71.8 | 10.9 | 13962.0 | 7.81 |
| 2 | 91 | Algeria | 0.75 | 59.6 | 19.7 | 11350.0 | 5.20 |
| 3 | 36 | Andorra | 0.87 | 91.6 | NaN | NaN | NaN |
| 4 | 148 | Angola | 0.58 | 14.3 | 31.7 | 6654.0 | 5.48 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 184 | 113 | Venezuela (Bolivarian Republic of) | 0.71 | 72.0 | 17.0 | NaN | 4.08 |
| 185 | 117 | Viet Nam | 0.70 | 70.3 | 16.5 | 8041.0 | 6.25 |
| 186 | 179 | Yemen | 0.47 | 26.7 | 30.9 | NaN | 4.17 |
| 187 | 146 | Zambia | 0.58 | 14.3 | 30.6 | 3479.0 | 6.71 |
| 188 | 150 | Zimbabwe | 0.57 | 27.1 | 22.5 | 2836.0 | 5.59 |
189 rows × 7 columns
#Checking out the street_view dataframe
street_view
| Country | |
|---|---|
| 0 | Albania |
| 1 | Argentina |
| 2 | Australia |
| 3 | Austria |
| 4 | Bangladesh |
| ... | ... |
| 64 | Ukraine |
| 65 | United Kingdom |
| 66 | United States |
| 67 | Uruguay |
| 68 | Viet Nam |
69 rows × 1 columns
#Filtering the undp dataframe based upon the countries which have full street view available
covered = undp[undp['Countries'].isin(street_view['Country'])]
covered
| HDI Rank | Countries | HDI 2019 | Internet users, total (% of population) 2018 | Coefficient of Human Inequality 2019 | GDP per capita (2017 PPP $) | Human Freedom Score 2018 | |
|---|---|---|---|---|---|---|---|
| 1 | 69 | Albania | 0.80 | 71.8 | 10.9 | 13962.0 | 7.81 |
| 6 | 46 | Argentina | 0.85 | 74.3 | 13.2 | 22034.0 | 7.05 |
| 8 | 8 | Australia | 0.94 | 86.5 | 7.9 | 49756.0 | 8.68 |
| 9 | 18 | Austria | 0.92 | 87.7 | 6.9 | 56352.0 | 8.45 |
| 13 | 133 | Bangladesh | 0.63 | 15.0 | 23.7 | 4754.0 | 5.67 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 177 | 74 | Ukraine | 0.78 | 58.9 | 6.5 | 12810.0 | 6.45 |
| 179 | 13 | United Kingdom | 0.93 | 94.9 | 7.9 | 46699.0 | 8.44 |
| 180 | 17 | United States | 0.93 | 87.3 | 12.1 | 62683.0 | 8.44 |
| 181 | 55 | Uruguay | 0.82 | 68.3 | 12.6 | 21561.0 | 7.92 |
| 185 | 117 | Viet Nam | 0.70 | 70.3 | 16.5 | 8041.0 | 6.25 |
69 rows × 7 columns
#Filtering out the other countries
uncovered = undp[~undp['Countries'].isin(street_view['Country'])]
uncovered
| HDI Rank | Countries | HDI 2019 | Internet users, total (% of population) 2018 | Coefficient of Human Inequality 2019 | GDP per capita (2017 PPP $) | Human Freedom Score 2018 | |
|---|---|---|---|---|---|---|---|
| 0 | 169 | Afghanistan | 0.51 | 13.5 | NaN | 2202.0 | NaN |
| 2 | 91 | Algeria | 0.75 | 59.6 | 19.7 | 11350.0 | 5.20 |
| 3 | 36 | Andorra | 0.87 | 91.6 | NaN | NaN | NaN |
| 4 | 148 | Angola | 0.58 | 14.3 | 31.7 | 6654.0 | 5.48 |
| 5 | 78 | Antigua and Barbuda | 0.78 | 76.0 | NaN | 21908.0 | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 183 | 140 | Vanuatu | 0.61 | 25.7 | NaN | 3144.0 | NaN |
| 184 | 113 | Venezuela (Bolivarian Republic of) | 0.71 | 72.0 | 17.0 | NaN | 4.08 |
| 186 | 179 | Yemen | 0.47 | 26.7 | 30.9 | NaN | 4.17 |
| 187 | 146 | Zambia | 0.58 | 14.3 | 30.6 | 3479.0 | 6.71 |
| 188 | 150 | Zimbabwe | 0.57 | 27.1 | 22.5 | 2836.0 | 5.59 |
120 rows × 7 columns
#Checking missing values
covered.isna().sum()
HDI Rank 0 Countries 0 HDI 2019 0 Internet users, total (% of population) 2018 0 Coefficient of Human Inequality 2019 3 GDP per capita (2017 PPP $) 1 Human Freedom Score 2018 1 dtype: int64
#Checking missing values
uncovered.isna().sum()
HDI Rank 0 Countries 0 HDI 2019 0 Internet users, total (% of population) 2018 1 Coefficient of Human Inequality 2019 34 GDP per capita (2017 PPP $) 7 Human Freedom Score 2018 28 dtype: int64
#Substituting the missing values with column mean
covered = covered.fillna(covered.mean())
uncovered = uncovered.fillna(uncovered.mean())
# Generating a scatterplot comparing HDI and GDP per capita.
# The plot is coloured to distinguish the covered and uncovered datasets.
# GDP per capita is used to size the different data points.
concatenated = pd.concat([covered.assign(dataset='covered'), uncovered.assign(dataset='uncovered')])
sb.set_style('whitegrid')
compareplot0 = sb.scatterplot(x='HDI 2019', y = 'GDP per capita (2017 PPP $)', data = concatenated,
size = 'Human Freedom Score 2018', alpha = 0.5, hue = 'dataset',
sizes =(10,200), palette = 'tab10' )
plt.legend(loc="upper left", frameon=True, fontsize=12)
<matplotlib.legend.Legend at 0x27cb771c430>
# Generating a 3D scatterplot comparing Human Inequality, Human Freedom and HDI.
# The plot is coloured to distinguish the covered and uncovered datasets.
# GDP per capita is used to size the different data points.
compareplot01 = sb.scatterplot(x='Human Freedom Score 2018', y = 'Coefficient of Human Inequality 2019' ,
data = concatenated, size='Internet users, total (% of population) 2018',
alpha = 0.5, hue = 'dataset', sizes =(10,200), palette = 'tab10' )
plt.legend(loc="upper left", frameon=True, fontsize=12)
<matplotlib.legend.Legend at 0x27cb80427f0>
# Generating a 3D scatterplot comparing Human Inequality, Human Freedom and HDI.
# The plot is coloured to distinguish the covered and uncovered datasets.
# GDP per capita is used to size the different data points.
fig = px.scatter_3d(concatenated, x= 'Coefficient of Human Inequality 2019',
y = 'Human Freedom Score 2018', z='HDI 2019' ,
size = 'GDP per capita (2017 PPP $)', color = 'dataset',
opacity = 1, size_max = 50)
fig.update_layout(scene = dict(xaxis = dict(range=[50,5],),
xaxis_title='Coeff. of Human Inequality',
yaxis_title='Human Freedom',
zaxis_title='HDI'),
margin=dict(l=0, r=0, b=0, t=0),
#scene_camera = dict(eye=dict(x=2, y=2, z=0.1)
)
camera = dict(
eye=dict(x=2, y=0.75, z=1)
)
fig.update_layout(scene_camera=camera)
fig.show()
As can be seen from the above graphs, the street view covered countires tend to have (as compared to street view uncovered countries):
Makes you wonder...
#sb.pairplot(concatenated, hue = 'dataset')
#Comparing every field with HDI 2019 Score
compareplot1 = sb.pairplot(concatenated, hue = 'dataset',
x_vars = ['HDI 2019', 'Internet users, total (% of population) 2018',
'Coefficient of Human Inequality 2019',
'GDP per capita (2017 PPP $)','Human Freedom Score 2018'],
y_vars = ['HDI 2019'], height = 3 )
#Comparing every field with Internet users, total (% of population) 2018
compareplot2 = sb.pairplot(concatenated, hue = 'dataset',
x_vars = ['Internet users, total (% of population) 2018', 'HDI 2019',
'Coefficient of Human Inequality 2019', 'GDP per capita (2017 PPP $)',
'Human Freedom Score 2018'],
y_vars = ['Internet users, total (% of population) 2018'], height = 3)
#Comparing every field with Coefficient of Human Inequality 2019
compareplot3 = sb.pairplot(concatenated, hue = 'dataset',
x_vars = ['Coefficient of Human Inequality 2019',
'Internet users, total (% of population) 2018', 'HDI 2019',
'GDP per capita (2017 PPP $)','Human Freedom Score 2018'],
y_vars = ['Coefficient of Human Inequality 2019'], height = 3)
#Comparing every field with GDP per capita (2017 PPP $)
compareplot4 = sb.pairplot(concatenated, hue = 'dataset',
x_vars = ['GDP per capita (2017 PPP $)',
'Internet users, total (% of population) 2018',
'Coefficient of Human Inequality 2019', 'HDI 2019',
'Human Freedom Score 2018'],
y_vars = ['GDP per capita (2017 PPP $)'], height = 3)
#Comparing every field with Human Freedom Score 2018
compareplot4 = sb.pairplot(concatenated, hue = 'dataset',
x_vars = ['Human Freedom Score 2018',
'Internet users, total (% of population) 2018',
'Coefficient of Human Inequality 2019',
'GDP per capita (2017 PPP $)','HDI 2019'],
y_vars = ['Human Freedom Score 2018'], height = 3)
The above one by one comparison also tells the same story as mentioned previously
#Generating a heatmap to showcase the correlation of different columns
sb.heatmap(undp.loc[:, undp.columns != 'HDI Rank'].corr(), annot = True)
plt.show()
Logical trends are seen here:
On the surface, it might seem that this street-view feature is available mostly in the well-to-do countries, however there might be some deep underlying obstacles for Google to carry out this mission. All of this seeming disparity in coverage may basically boil down to these certain factors:
In any case, this is a wonderful feature provided by Google to see distant lands from the comfort of your home, and surely it is going to increase its reach in the future - for which we might have to be patient. And with that, this marks the end of this brief analysis.